/*************************************************************************
 *                                                                       *
 * This file is part of the FreeMAPs distribution.  For full copyright   *
 * information, see COPYRIGHT and COPYING.LESSER.                        *
 *                                                                       *
 * Author:           sqbang                                              *
 * Email:            sqbang@ustc.edu                                     *
 * Date:             2016.03.24                                          *
 *                                                                       *
 *************************************************************************/

#ifndef FreeMAPs_include_COMMON_bdry_DistributedLoadBoundaryCondition_h
#define FreeMAPs_include_COMMON_bdry_DistributedLoadBoundaryCondition_h

#include "FreeMAPsConfig.h"

//COMMON headers
#include "COMMON/base/Common.h"
#include "COMMON/bdry/IrregularBoundaryConditionStrategy.h"
#include "COMMON/enum/BoundaryConditionType.h"

namespace FreeMAPs
{

//forward delcaration
class Function;

/**
 * @brief PressureBoundaryCondition may used in ElasticMechanicsEquationEnsemble
 * or FluidEquationEnsemble.
 */
class DistributedLoadBoundaryCondition : public IrregularBoundaryConditionStrategy
{
public:

    DistributedLoadBoundaryCondition (
        const std::string& parent_name,
        const std::string& bc_name,
        const PDEEquationEnsembleStrategy* equation_ensemble);

    ~DistributedLoadBoundaryCondition ();

public:

    /**
     * @return the boundary condition type
     */
    inline virtual BoundaryConditionType
    get_type() const;

    inline virtual bool
    require_set_variable() const;

//    inline const std::vector<Function*>&
//    get_para_load() const;

private:

    void
    clear();

    void
    get_info_for_derived_object_from_input (
        const InputDatabase* db);

    std::string
    get_info_from_derived_object() const;


private:

    typedef IrregularBoundaryConditionStrategy Parent;

    //std::vector<Function*> d_para_load;

private:

    DISALLOW_COPY_AND_ASSIGN (DistributedLoadBoundaryCondition);
};

}

#include "COMMON/bdry/DistributedLoadBoundaryCondition.inl"

#endif
